import os
import json
import logging
from logging.handlers import TimedRotatingFileHandler
from datetime import datetime, timedelta
from typing import Dict, Any

# 设置日志文件路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG_DIR = os.path.join(BASE_DIR, "logs")

# 确保日志目录存在
os.makedirs(LOG_DIR, exist_ok=True)

# 配置日志记录器
def setup_logger():
    logger = logging.getLogger('net_api')
    logger.setLevel(logging.INFO)
    
    # 移除现有处理器以避免重复添加
    if logger.handlers:
        for handler in list(logger.handlers):
            logger.removeHandler(handler)

    # 获取当天的日志文件路径 (用作基础文件名，TimedRotatingFileHandler会自动添加日期后缀)
    base_log_file = os.path.join(LOG_DIR, "net_.log") 
    
    # 创建定时轮转文件处理器，每天轮转，保留7个备份
    file_handler = TimedRotatingFileHandler(
        base_log_file, 
        when="midnight", 
        interval=1, 
        backupCount=7, 
        encoding='utf-8'
    )
    file_handler.setLevel(logging.INFO)
    
    # 创建控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    
    # 设置日志格式
    formatter = logging.Formatter(
        '%(asctime)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)
    
    # 添加处理器到日志记录器
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    
    return logger

# 创建日志记录器实例
logger = setup_logger()

def log_api_request(bh: str, request_data: Dict[str, Any], start_time: float):
    """记录API请求信息"""
    log_data = {
        "请求时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        "信访件编号": bh,
        "原始编号": request_data.get("ysbh", ""),
        "请求数据": request_data
    }
    logger.info(f"API请求信息: {json.dumps(log_data, ensure_ascii=False)}")

def log_workflow_output(bh: str, workflow_output: str, processing_time: float):
    """记录工作流输出"""
    log_data = {
        "工作流输出时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        "工作流处理耗时": f"{processing_time:.2f}秒",
        "信访件编号": bh,
        "工作流输出": workflow_output
    }
    logger.info(f"工作流输出: {json.dumps(log_data, ensure_ascii=False)}")

def log_api_response(bh: str, response_data: Dict[str, Any], processing_time: float):
    """记录API响应信息"""
    # 优先从response_data['ysbh']获取原始编号，否则兼容旧结构
    ysbh = response_data.get("ysbh", "")
    log_data = {
        "处理完成时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        "整个处理耗时": f"{processing_time:.2f}秒",
        "信访件编号": bh,
        "原始编号": ysbh,
        "响应数据": response_data
    }
    logger.info(f"API响应信息: {json.dumps(log_data, ensure_ascii=False)}")

def log_error(bh: str, error_message: str):
    """记录错误信息"""
    log_data = {
        "信访件编号": bh,
        "错误信息": error_message
    }
    logger.error(f"错误信息: {json.dumps(log_data, ensure_ascii=False)}")

def log_info(bh: str, info_message: str):
    """记录一般信息"""
    log_data = {
        "信访件编号": bh,
        "信息": info_message
    }
    logger.info(f"信息: {json.dumps(log_data, ensure_ascii=False)}") 